/**
 *
 * User: wangshan
 * Email wangshan@fclassroom.com
 * Date: 17-12-04
 * Time: PM 02:07
 * Explain: 状态管理
 *  ｛
 *     state，驱动应用的数据源（用一个对象就包含了全部的应用层级状态，每个应用将仅仅包含一个 store 实例，使用 mapState 辅助函数帮助我们生成计算属性）;
 *     actions，响应在view上的用户输入导致的状态变化。(Action 提交的是 mutation，而不是直接变更状态。);
 *     getters，store 中的 state 中派生出一些状态(Vuex 允许我们在 store 中定义『getters』（可以认为是 store 的计算属性）);
 *     mutation，更改 Vuex 的 store 中的状态的唯一方法是提交 mutation (可以向 store.commit 传入额外的参数);
 *     modules，Vuex 允许我们将 store 分割成模块（module）。每个模块拥有自己的 state、mutation、action、getter、;
 *  ｝
 *
 **/
import Vue from 'vue'
import Vuex from 'vuex'
import * as getters from './getters'
import state from './state'
import mutations from './mutations'
import createPersistedState from 'vuex-persistedstate'

Vue.use(Vuex)

const debug = process.env.NODE_ENV !== 'production'

export default new Vuex.Store({
  getters,
  state,
  mutations,
  strict: debug,
  plugins: [createPersistedState()]
})
